/**********************************************************************************************/
/* FBL_I_PropertyContainer.h	                                               				  */
/*                                                                       					  */
/* Copyright Paradigma, 1993-2006															  */
/* All Rights Reserved                                                   					  */
/**********************************************************************************************/

#ifndef _FBL_I_PropertyContainer_h
	#define _FBL_I_PropertyContainer_h

#include <VShared/FBL/publ/Interfaces/FBL_I_Property.h>

#include <VShared/FBL/publ/Headers/FBL_pre_header.h>


/**********************************************************************************************/
FBL_Begin_Namespace


/**********************************************************************************************/
SMART_INTERFACE(I_PropertyContainer);


/**********************************************************************************************/
// This class specifies the API of PropertyContainer Container.
// 
interface FBL_SHARED_EXP_CLASS I_PropertyContainer : public I_Unknown
{
virtual						~I_PropertyContainer( void );

	// ---------------------
	// PropertyContainer:
		
		// <Count> [r/o]
							/** Returns count of PropertyContainer */
virtual ulong 				get_Count( void ) const throw() = 0;	

		// <Property> [r/o]
							/** Returns property by index */
virtual I_Property_Ptr		get_Property( ulong inIndex ) const throw() = 0;	

		// <Property> [r/o]
							/** Returns property by name. Case insensetive. */
virtual I_Property_Ptr		get_Property( const UChar* inName ) const throw() = 0;

virtual I_Property_Ptr		get_Property( const String& inName ) const throw() = 0;

	
	// ---------------------
	// Methods to work with PropertyContainer:		

							/** Add new property to the PropertyContainer set.
								If exist property with the same name then it is replaced. 
								*/
virtual void 				Add( I_Property_Ptr inProperty) = 0;

							/** Delete property from PropertyContainer set */
virtual void 				Remove( const I_Property_Ptr inProperty ) throw() = 0;

							/** Delete property from PropertyContainer set */
virtual void 				Remove( const UChar* inName ) throw() = 0;

							/** Delete property from PropertyContainer set */
virtual void 				Remove( const String& inName ) throw() = 0;

							/** Delete all property from PropertyContainer set */
virtual void 				Clear( void ) throw() = 0;

}; 


/**********************************************************************************************/
FBL_End_Namespace

#include <VShared/FBL/publ/Headers/FBL_post_header.h>

#endif // _FBL_I_PropertyContainer_h
